# -*- codeing = utf-8 -*-
# @Time : 2024/7/23 17:15
# @Author : 袁美玉
# @File : demo4_博文文章.py
# @Software  ：PyCharm
"""
爬取新浪微博博文的文章，并将其保存到带有目录的word文档里面
步骤：
1.先获取到所有文章的标题、发表日期、链接
2.通过链接获取文章的内容
3.将文章标题作为“1级”，发表日期和内容作为正文写入word文件
4.保存wrod文件
"""

import requests
from bs4 import BeautifulSoup
import docx
from docx.oxml.ns import qn
import re
import os

def main():
    # 1.获取文章的标题，链接，日期
    all_data=getlink()

    #2.保存到excel表中
    to_word(all_data)

    # 3.下载链接内容
    #Sina_pic(all_data)

# 哈哈哈
def getlink():
    all_data = []  # 存放字典[{}， {}， {}]
    # 需要考虑分页，不同页url不一样。
    for i in range(1,2):
        url = f"https://blog.sina.com.cn/s/articlelist_5119330124_0_{i}.html"
        wb_data = requests.get(url)
        # print(wb_data.text)
        # 解析
        soup = BeautifulSoup(wb_data.content,'lxml')
        # print(soup)
        links = soup.select('.atc_title')  # 解析博文标题， select方法会查找任意标签，其class =atc_title
        times = soup.select('.atc_tm')  # 解析博文日期
        # 上述是第一页内所有的博文标题和日期，需要用for遍历
        for i in range(len(links)):
            all_link = {}  # 一个空字典，每一个文章的信息放在这个空字典里面
            http_link = links[i].select('a')[0].get('href') # 获取链接
            title = links[i].text.strip()  # 获取标题，前后去空
            time = times[i].text   # 获取日期
            all_link[title] = [http_link,time]  # 存入字典
            all_data.append(all_link)  # 字典加入列表
   # print(all_data)
    return all_data



def to_word(all_data):
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"}
    doc = docx.Document() # 新建word文档
    doc.styles['Normal'].font.name = u'宋体'  #设置正文字体为宋体
    doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') #设置中文字体是宋体
    counter = 0  # 计数器
    for example in all_data:
        for title in example.keys():
            doc.add_heading(title,1) # 添加一级标题
            data = example[title][1][:10]
            doc.add_paragraph(data)  # 添加段落
            # 根据链接获取文章的正文
            url = "https:" + example[title][0]
            wb_data = requests.get(url)
            # print(wb_data)
            soup = BeautifulSoup(wb_data.content,'lxml')
            artile = soup.select(".articalContent.newfont_family")
            # print(artile)
            if artile:
                doc.add_paragraph(artile[0].text)
                counter += 1
                print(f"写入第-{counter}-篇文章: {title}。")
                if counter > 150:
                    break
        print(f"一共写入了{counter}篇文章")
        doc.save("新浪微博文章.docx")






if __name__ == "__main__":
    main()
